home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / arc_lbr / squash.arc / SQUASH.H < prev   
Text File  |  1987-11-12  |  3KB  |  107 lines

  1. /*      SQUASH.H header file for limpel Ziv routine
  2.            this header should follow STDIO.h
  3. */
  4.  
  5. #ifndef EOF    /* defined in stdio.h */
  6. #include  <stdio.h>
  7. #endif
  8.  
  9. compress (FILE *,FILE *);
  10. decompress(FILE *, FILE *);
  11.  
  12. /*
  13.  * block compression parameters -- after all codes are used up,
  14.  * and compression rate changes, start over.
  15.  */
  16.  
  17. #define CHECK_GAP 10000         /* ratio check interval */
  18.  
  19. /*
  20.  * the next two codes should not be changed lightly, as they must not
  21.  * lie within the contiguous general code space.
  22.  */
  23.  
  24. #define FIRST    257            /* first free entry */
  25. #define CLEAR    256            /* table clear output code */
  26.  
  27. /*
  28.  * To save much memory, we overlay the table used by compress() with those
  29.  * used by decompress().  The tab_prefix table is the same size and type
  30.  * as the codetab.  The tab_suffix table needs 2**BITS characters.  We
  31.  * get this from the beginning of htab.  The output stack uses the rest
  32.  * of htab, and contains characters.  There is plenty of room for any
  33.  * possible stack (stack used to be 8000 characters).
  34.  */
  35.  
  36. #define MAXCODE(n_bits)  (( 1<<(n_bits)) - 1)
  37.  
  38. #define tab_prefixof(i) codetab[i]
  39. #define tab_suffixof(i)        ((unsigned char *)(htab))[i]
  40. #define de_stack           ((unsigned char *)&tab_suffixof(1<<BITS))
  41.  
  42. #define BITS   13            /* could be restricted to 12 */
  43. #define INIT_BITS 9            /* initial number of bits/code */
  44.  
  45. #if BITS == 13
  46. # define HSIZE    9001            /* 91% occupancy */
  47. #endif
  48. #if BITS <= 12
  49. # define HSIZE    5003            /* 80% occupancy */
  50. #endif
  51.  
  52. struct arch_header            /* archive entry header format */
  53. {
  54.     char archmark;            /* should always be 0x1a; */
  55.     char atype;             /* header type */
  56.     char name[13];            /* file name */
  57.     long lzwsize;            /* size of file, in bytes */
  58.     unsigned date;            /* creation date */
  59.     unsigned time;            /* creation time */
  60.     unsigned crc;            /* cyclic redundancy check */
  61.     long length;            /* true file length */
  62. }
  63. ;
  64.  
  65. #ifdef MAIN
  66. struct arch_header ahead;
  67. long htab [HSIZE];
  68. unsigned short codetab [HSIZE];
  69. short hsize ;                /* for dynamic table sizing */
  70. int offset;
  71. long int in_count = 1;            /* length of input */
  72. long int bytes_out= 0;            /* length of compressed output */
  73. long int out_count = 0;         /* # of codes output (for debugging) */
  74. long  int ratio = 0;
  75. long checkpoint = CHECK_GAP;
  76. short clear_flg = 0;
  77. short n_bits;                /* number of bits/code */
  78. short max_bits = BITS;            /* user settable max # bits/code */
  79. short maxcode;                /* maximum code, given n_bits */
  80. short maxmaxcode = 1 << BITS;        /* should NEVER generate this code */
  81. short crc=0;
  82. int free_ent = 0;            /* first unused entry */
  83. long lzwsize;
  84. #else
  85. extern long htab [HSIZE];
  86. extern long int in_count;        /* length of input */
  87. extern long int bytes_out;        /* length of compressed output */
  88. extern long int out_count;        /* # of codes output (for debugging) */
  89. extern long  int ratio;
  90. extern long checkpoint;
  91. extern short clear_flg;
  92. extern short n_bits;            /* number of bits/code */
  93. extern short max_bits;            /* user settable max # bits/code */
  94. extern short maxcode;            /* maximum code, given n_bits */
  95. extern short maxmaxcode;        /* should NEVER generate this code */
  96. extern short crc;
  97. extern short free_ent;            /* first unused entry */
  98. extern unsigned short codetab [HSIZE];
  99. extern short hsize ;            /* for dynamic table sizing */
  100. extern short offset;
  101. extern struct arch_header ahead;
  102. extern long lzwsize;
  103. #endif
  104.  
  105. int getcode(FILE *);
  106.  
  107.